home *** CD-ROM | disk | FTP | other *** search
- ;
- ; This programm is extremelly slow. Don't run it.
- ; It is only for example for step 2.
- ;
- .model tiny
- .486
- .code
- .startup
- org 100h
-
- jmp @0
-
- include msg.inc
- include debug.inc
-
- UpdateBytes macro
- mov edx,newcrc
- movzx ebx,byte ptr [Key0]
- xor bl,dl
- shr edx,8
- xor edx,Magic32[ebx*4]
-
- movzx ebx,byte ptr [Key1]
- xor bl,dl
- shr edx,8
- xor edx,Magic32[ebx*4]
-
- mov bl,byte ptr [Key2]
- xor bl,dl
- shr edx,8
- xor edx,Magic32[ebx*4]
-
- mov bl,byte ptr [Key3]
- xor bl,dl
- shr edx,8
- xor edx,Magic32[ebx*4]
-
- mov bl,byte ptr [Key4]
- xor bl,dl
- shr edx,8
- xor edx,Magic32[ebx*4]
-
- mov al,dl
- xor al,crc4i
- mov _b1,al
- shr edx,8
- xor edx,dword ptr crc4
-
- mov al,dl
- xor al,crc3i
- mov _b2,al
- shr edx,8
- xor edx,dword ptr crc3
-
- mov al,dl
- xor al,crc2i
- mov _b3,al
- shr edx,8
- xor edx,dword ptr crc2
-
- mov al,dl
- xor al,crc1i
- mov _b4,al
- endm
-
- _real32 dword 0
-
- NewCrc dword 0
- crc16 word 0
-
- FullCrc:
- _d byte 0
- _c byte 0
- _b byte 0
- _a byte 0
- Crc1:
- _4 byte 0
- _3 byte 0
- _2 byte 0
- _1 byte 0
- Crc2:
- byte 0
- _7 byte 0
- _6 byte 0
- _5 byte 0
- Crc3:
- byte 0
- byte 0
- _9 byte 0
- _8 byte 0
- Crc4:
- byte 0
- byte 0
- byte 0
- _10 byte 0
-
- Crc1i byte 0
- Crc2i byte 0
- Crc3i byte 0
- Crc4i byte 0
-
- Key byte 256-8-1 dup(0)
-
- Key0 byte 1
- Key1 byte 0
- Key2 byte 0
- Key3 byte 0
- Key4 byte 0
-
- _b1 byte 0
- _b2 byte 0
- _b3 byte 0
- _b4 byte 0
-
- ;_ebx dword 0
- ;_h word 0
- ;log byte 'crclog',0
-
- Magicon equ 0edb88320h
-
- Magic32 dword 256 dup(1)
- Cache32 byte 256 dup(2,2,2,2,2)
-
- @0:
-
- call InitMagic32
-
- mov eax,_real32
- mov dword ptr FullCrc,eax
-
- mov edx,0
- lea si,Key
- mov cx,256-8-1
- cld
- xor ebx,ebx
- @10: mov bl,byte ptr [si]
- inc si
- xor bl,dl
- shr edx,8
- xor edx,Magic32[ebx*4]
- loop @10
- mov dword ptr newcrc,edx
- call CalcBytes
-
- mov eax,12340000h
- push 0B800h
- pop gs
-
- @e2:
-
- push eax
- mov dword ptr Key1,eax
-
- UpdateBytes
-
- xor eax,eax
- xor ebx,ebx
- mov si, offset Key0-3
-
- REPT 9
- local @@1
- movsx cx,byte ptr [si]
- mov ax,[si+1]
-
- inc si
- mul cx
-
- mov cl, [si+2]
- @@1: rol eax, cl
- xor ebx, eax
- push cx
- movsx cx, al
- rol ebx, cl
- pop cx
- not eax
- loop @@1
- ENDM
-
- cmp ebx, 0A69EC24Eh
- jz @ok
-
- pop eax
- inc al
- jnz @e2
- mov byte ptr gs:[0],ah
- inc ah
- jnz @e2
-
- @Message 'fuck! ',0
- retn
-
-
- @ok: pop eax
- lea si,Key1
- mov cx,8
- @ok2: lodsb
- call $ShowAL
- $ShowSymb ' '
- loop @ok2
- call $Next_Line
- lea dx,fname
- mov ax,3C00h
- xor cx,cx
- int 21h
- xchg ax,bx
- lea dx,Key
- mov cx,256
- mov ah,40h
- int 21h
- mov ah,3Eh
- int 21h
- retn
- fname db '!ok!',0
-
- InitMagic32:
- std
- mov di,OFFSET Magic32+0400h-4 ; Last WORD of the array
- mov dx,0FFh
- im0: mov cx,8
- movzx eax,dx
- im1: shr eax,1
- jnc im2
- xor eax,Magicon
- im2: loop im1
- stosd
- push eax
- shr eax,24
- lea si,Cache32[eax+eax*4]
- pop dword ptr [si]
- mov [si+4],dl
- dec dx
- jns im0
- cld
- ret
- CalcBytes:
- movzx eax,_a
- mov cl,Cache32[eax*4+eax+4]
- mov eax,dword ptr Cache32[eax*4+eax]
-
- mov dword ptr crc1,eax
- mov crc1i,cl
-
- movzx eax,_b
- xor al,_2
- mov cl,Cache32[eax*4+eax+4]
- mov eax,dword ptr Cache32[eax*4+eax]
- mov dword ptr crc2,eax
- mov crc2i,cl
-
- movzx eax,_c
- xor al,_3
- xor al,_6
- mov cl,Cache32[eax*4+eax+4]
- mov eax,dword ptr Cache32[eax*4+eax]
- mov dword ptr crc3,eax
- mov crc3i,cl
-
- movzx eax,_d
- xor al,_4
- xor al,_7
- xor al,_9
- mov cl,Cache32[eax*4+eax+4]
- mov eax,dword ptr Cache32[eax*4+eax]
- mov dword ptr crc4,eax
- mov crc4i,cl
- retn
-
-
- end
-
-